const { verify } = require('../utils/jwt')
const { jwtSecret } = require('../config')
const { User } = require('../model')
const Error = require('../config/error-code')

// 用户身份验证
module.exports = async (req,res,next) => {
    // 从请求头获取token数据
    let token = req.headers.token;
    token = token ? token.split('xp ')[1] : null
    if (!token) {
        // token不存在 返回token不存在
        return res.status(200).json({
            success:false,
            errcode:Error['XP000'].errcode,
            errmsg:Error['XP000'].errmsg,
            data:{}
        });
    }
    // 验证token是否有效
    try {
        // 有效则把用户信息读取出来挂载到req请求对象上，继续往后执行
        const decodedToken = await verify(token,jwtSecret)
        // 验证通过，从数据库中查找相关的信息
        req.user = await User.findById(decodedToken.id)
        if (!req.user) {
            // 用户不存在
            return res.status(200).json({
                success:false,
                errcode:Error['XP012'].errcode,
                errmsg:Error['XP012'].errmsg,
                data:{}
            });
        }
        next()
    } catch (err) {
        // 无效，已过期
        return res.status(200).json({
            success:false,
            errcode:Error['XP001'].errcode,
            errmsg:Error['XP001'].errmsg,
            data:{}
        });
    }
}